Passed
Push — task/applicant-profile-api ( 747d8b...3edd34 )
by Yonathan
09:18 queued 01:23
created

ReviewApplicationsRoot.handleBulkStatusChange   A

Complexity

Conditions 3

Size

Total Lines 42
Code Lines 33

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 33
dl 0
loc 42
rs 9.0879
c 0
b 0
f 0
1
/* eslint camelcase: "off" */
2
import React from "react";
3
import ReactDOM from "react-dom";
4
import { useIntl } from "react-intl";
5
import { useDispatch } from "react-redux";
6
import { DispatchType } from "../../configureStore";
7
import {
8
  useFetchApplicationsByJob,
9
  useFetchJob,
10
} from "../../hooks/applicationHooks";
11
import { loadingMessages } from "../Application/applicationMessages";
12
import { ApplicationReview } from "../../models/types";
13
import ReviewApplications from "./ReviewApplications";
14
import RootContainer from "../RootContainer";
15
import { Portal } from "../../models/app";
16
import {
17
  updateApplicationReview,
18
  batchUpdateApplicationReviews,
19
} from "../../store/Application/applicationActions";
20
21
interface ReviewApplicationsRootProps {
22
  jobId: number;
23
  portal: Portal;
24
}
25
26
const ReviewApplicationsRoot: React.FC<ReviewApplicationsRootProps> = ({
27
  jobId,
28
  portal,
29
}): React.ReactElement => {
30
  const intl = useIntl();
31
  const dispatch = useDispatch<DispatchType>();
32
33
  const applications = useFetchApplicationsByJob(jobId, dispatch);
34
  const job = useFetchJob(jobId, dispatch);
35
  const handleUpdateApplicationReview = async (
36
    editedApplicationReview: ApplicationReview,
37
  ): Promise<void> => {
38
    await dispatch(updateApplicationReview(editedApplicationReview));
39
  };
40
  const handleBatchUpdateApplicationReviews = async (
41
    editedApplicationReviews: ApplicationReview[],
42
  ): Promise<void> => {
43
    await dispatch(batchUpdateApplicationReviews(editedApplicationReviews));
44
  };
45
46
  return (
47
    <div data-clone>
48
      {job === null || applications === null ? (
49
        <h2
50
          data-c-heading="h2"
51
          data-c-align="center"
52
          data-c-padding="top(2) bottom(2)"
53
        >
54
          {intl.formatMessage(loadingMessages.loading)}
55
        </h2>
56
      ) : (
57
        <ReviewApplications
58
          portal={portal}
59
          job={job}
60
          applications={applications}
61
          handleUpdateReview={handleUpdateApplicationReview}
62
          handleBatchUpdateApplicationReviews={
63
            handleBatchUpdateApplicationReviews
64
          }
65
        />
66
      )}
67
    </div>
68
  );
69
};
70
71
export default ReviewApplicationsRoot;
72
73
const container = document.getElementById("review-applications-container");
74
if (container !== null) {
75
  if ("jobId" in container.dataset && "portal" in container.dataset) {
76
    const jobId = Number(container.dataset.jobId as string);
77
    const portal = container.dataset.portal as Portal;
78
79
    ReactDOM.render(
80
      <RootContainer>
81
        <ReviewApplicationsRoot jobId={jobId} portal={portal} />
82
      </RootContainer>,
83
      container,
84
    );
85
  }
86
}
87